/* "qDroid v.2011.01.12 alpha-3"
 * qdlib_otpdnode.h
 *
 * utf-8 encoded
 *
 *  Created on: 17.11.2008
 *      Author: Denjs
 *
 * Это демо-класс с базовой функциональностью, демонстрирующий
 * структуры необходимые для создания класса-расширения qDROID.
 * Эдесь описаны только важные для успешной загрузки и использования
 * функции.
 *
 * Это класс можно использовать как шаблон для написания
 * своего расширения qDROID.
 *
 * замените "qdlib_otpdnode" на имя вашего класса здесь,
 * исходнике класса qdlib_otpdnode.cpp,
 * исходнике функций библиотек в libqtsofarm.cpp
 * и переименуйте файлы данного класса соответвующим образом.
 * Не забудьте про "qdlib_otpdnode_H_"
 *
 * Далее, можно наследовать qdlib_otpdnode не от QObject,
 * а от стороннего класса, который вы хотите использовать в QtScript.
 * и переписать критичные функции описанные в данном демо-классе.
 *
 * Не забудьте, что только "слотовые" функции могут быть вызваны из скрипта.
 *
 */

/*
"обёрточный" класс-интерфейс к среде otpd

наследник t_dispatcher_thread.
Теперь t_dispatcher_thread является каркасом для работы OTPD

*/
#ifndef qdlib_otpdnode_H_
#define qdlib_otpdnode_H_

#include <QtCore>
#include <QtScript>

//собственно классы который мы оборачиваем в оболочку объявлены тут
//#include "./../../../../OTPD/classes/otpd_classes.h"
#include <OTPD/classes/otpd_classes.h>

//подключаем все как будло для OtpdLib

// а это не обязательно, но если мы хотим перенаправить qDebug в файл - это надо включить один раз в корневом файле...
//#include "./../../OTPD/classes/qDebugRedirect.h"


//проведём наследование 
class qdlib_otpdnode :public t_dispatcher_thread //QObject
{
    Q_OBJECT

public:
        //t_dispatcher_thread *dispatcherThread; //поток диспетчера.

	qdlib_otpdnode();
	virtual ~qdlib_otpdnode();

    	//это (ниже) нужно что бы можно было засунуть класс в контейнер QList
    	// возможно так-же связано с работой QtScript движка - см функции
		// после определения класса
		//
    	// спец. настройки для QtScript (v 2008.11.25)
    	// Шаг 1 из 8
    	qdlib_otpdnode(const qdlib_otpdnode &other);

    	//это (ниже) нужно что бы можно было засунуть t_FileList в контейнер QList
    	// возможно так-же связано с работой QtScript движка - см функции
    	// после определения класса
    	//
    	// спец. настройки для QtScript (v 2008.11.25)
    	// Шаг 2 из 8
    	qdlib_otpdnode& operator=(const qdlib_otpdnode &other);


    	// спец. настройки для QtScript (v 2008.11.25)
    	// Шаг 2.2 из 8
		bool operator==(const qdlib_otpdnode &other ) const;


public slots:
	QString GetId();

	//========== сюда вставляем функции для доступа из скрипта =========
//moved to t_dispatcher_thread:	qint32 init(QString _ini_text, QString _log_file_name="");
//moved to t_dispatcher_thread:	qint32 init_from_file(QString _ini_file_name, QString _log_file_name="");
	
//moved to t_dispatcher_thread:	QString send(QString _phtmlTaskText);
	
	//==================================================================
};

/*  qdlib_otpdnode */
//----------------------------------------------------------------------
//нужно чтобы можно было передавать эти элементы как параметры в функции внутри QtScript
// спец. настройки для QtScript (v 2008.11.25)
// Шаг 3 из 8
Q_DECLARE_METATYPE(qdlib_otpdnode*);

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 4 из 8
static QScriptValue f_qdroid_qdlib_otpdnode_toScriptValue(QScriptEngine *engine, qdlib_otpdnode* const &in)
{ return engine->newQObject(in); }

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 5 из 8
static void f_qdroid_qdlib_otpdnode_fromScriptValue(const QScriptValue &object, qdlib_otpdnode* &out)
{ out = qobject_cast<qdlib_otpdnode*>(object.toQObject()); }

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 6 из 8
//конструктор для последующего его определения как new в скрипте
static QScriptValue f_qdroid_qdlib_otpdnode_constructor(QScriptContext *QSContext, QScriptEngine *QSEngine)
	{
		//t_BaseBot BaseBot;
		QScriptValue QtSObject;
		QtSObject=QSEngine->newQObject(new qdlib_otpdnode()); //
		return QtSObject;
	}

// шаги 7 и 8 должны быть выполнены в программе которая собирается использовать данный класс совместно со скриптовым движком
//// спец. настройки для QtScript (v 2008.11.25)
//// Шаг 7 из 8
//// - это qScriptRegisterMetaType регистрация но это нужно сделать в головном классе
//// например в глобальной функции "define__qdroid_qtscript_functions()"
////// t_FileList TYPE defenition
//	qScriptRegisterMetaType(_QSEngine, f_qdroid_qdlib_otpdnode_toScriptValue, f_qdroid_qdlib_otpdnode_fromScriptValue);

//// спец. настройки для QtScript (v 2008.11.25)
//// Шаг 8 из 8
////- определение конструктора в контексте скрипта
////// t_FileList NEW constructor defenition
//	QScriptValue fun5_constr = _QSEngine->newFunction(f_qdroid_qdlib_otpdnode_constructor);
//	_QSEngine->globalObject().setProperty("qdlib_otpdnode", fun5_constr);

static int f_qdroid_qdlib_otpdnode_register(QScriptEngine *_QSEngine)
	{
		//шаг 7 регистрация метатипа
		qScriptRegisterMetaType(_QSEngine, f_qdroid_qdlib_otpdnode_toScriptValue, f_qdroid_qdlib_otpdnode_fromScriptValue);
		//шаг 8 регистрация конструктора
		_QSEngine->globalObject().setProperty("OtpdNode", _QSEngine->newFunction(f_qdroid_qdlib_otpdnode_constructor));
		return 0;
	}
//----------------------------------------------------------------------



#endif /* qdlib_otpdnode_H_ */
